#include <iostream>
using namespace std;

class B{
public:
    virtual void f(){
        cout << __PRETTY_FUNCTION__ << endl;
    };
};

class D : public B{
public:
    // override修饰的函数强制要求它覆盖基类的定义，如果找不到对应的基类，则会报错
    void f() override{
        cout << __PRETTY_FUNCTION__ << endl;
    }
    
    // override防止如下错误，不小心添加了int变量，导致编译器认为你声明了一个新函数，而不是对虚函数的重新定义
    /*
    void f(int a) override{
        cout << __PRETTY_FUNCTION__ << endl;
    }
    */
};

int main(){
    B b;
    D d;
    b.f();
    d.f();
    return 0;
}
